محاسبات عدديپي پيشرفته فصل اوليه مفاهيم خطا انواع با افزايش دقت از جمع تعداد محدود ارقام حاصل ميشود. (Truncation برش: error) خطاي (Precision) اين خطا كم مي شود. در نمايش يا ذخيره نمودن مقادير عددي با تعداد محدودي (Round off off error) خطاي گرد كردن: رقم بوجود مي آيد. بزرگترين/كوچكترين بزرگتر/كوچكتر شدن عدد از گت گت (Overflow/underflow) ا زسريز/پاريز: خطاي عددي كه مي تواند نمايش داده شود. در جمع دو عدد با اختلاف مقدار زياد بوجود مي آآيد. (Negligible addition) خطاي جمع خرد: كاهش اهمييت: significance) (Loss of : به علت عمل تفريق نادرست subtraction) (Bad كه از تفريق دو عدد با مقادير تقريبا برابر بوجود مي آآيد. بزرگنماي ي خطا: magnification) (Error كه از ضرب / عدد بزرگ/كوچك بوجود مي آيد. كوچك به يك تقسيم يك عدد با خطاي
و انتشار آن خطا X X true value نسبي: خطاي محاسباتي مطلق/ X X- X approimate value X d اگر d آخرين رقم بعد از اعشار digit) (Least significant مقدار تقريبي باشد: X X X S : تعداد ارقام با معناي مقدار تقريبي s خطاي محاسباتي عمليات چهار عمل اصلي: ± + ± X + X± X + X + + + و انتشار آن خطا داده شده اند مقادير خطاي مطلق و نسبي حاصل از گرد كردن: و مقدار تقريبي آن مثال: مقدار X X. 597;. 6 597 6 7 7 X..... 7. 7 X. 597 5
و انتشار آن خطا X. 7888;. 78. 7888; 7. 8 داده شده اند: و مقدار تقريبي آن مقدار خطاي حاصل از محاسبه : X- 7888 78 8 87 X... 7.. 7888. 78. 88. 88 ( X ) ( ) ( X ) ( ) X X (. 7888. 7888) (. 78. 78) (. 99) (. )... X. 99 X + ± + ±. X 5 خطا انواع خطاي محاسباتي در هر حال وجود خواهد داشت. هدف بايد كاهش هر چه ممكن مقدار خطا باشد. شناخت منشا خطا براي جهت افزايش دقت نتايج در محاسبات عددي بسيار حاي ز اهميت است. يكي از عوامل ريشه اي در كاهش خطاهاي بزرگ ناخواسته توجه به آلگوريتم عددي مناسب است. % Program Chap_ f inline('sqrt()*(sqrt( + ) sqrt())',''); f inline('sqrt()./(sqrt( + ) + sqrt())',''); ; format long e for k :5 fprintf('at %5.f, f()%.8f, f() %.8f\n',,f(),f()); *; s sqrt(+); s sqrt(); d s s; s s + s; fprintf('sqrt(+) %5.f, sqrt() %5.f \n',s,s); s); fprintf(' diff %5.f, sum %5.f \n',d,s); مثال: (خطاي تفريق نادرست) دو رابطه رياضي معادل: ( ) f () + f() + + 6
براي اجتناب از خطا نكاتي نكاتي براي اجتناب از خطاهاي بزرگ مقادير مياني در ضرب و تقسيم متوالي تا حد ممكن به نزديك گردند. و هنگاميكه ( ) z هنگاميكه و z داراي مقدار تقريبا برابرند. ( z ) : نكته داراي مقدار بسيار متفاوتند. هنگاميكه و z داراي مقدار تقريبا برابرند. ( ) ( z ) n n n مقدار هم ارز مثال : دو مثال e, e 7 % Program Chap_ clc, clearall all 6; e6; for n [ 9 9 ] fprintf('^%d/e^%d ( %5.5e \n',n,n,^n/ep(n*)); fprintf(' (/e^)^%d %5.5e \n',n,(/ep())^n); براي اجتناب از خطا نكاتي اجتناب از تفريق نامناسب هنگامي كه دو مقدار نزديك به هم هستند. + b b ac a cos f() b b ac نمونه : f() a sin ( + cos) نمونه : 8 % Program Chap_: round off error test f inline('( ( cos())//''');, ); f inline('sin()*sin()///( + cos())',''); for k : k*pi; tmp ; for k :8 tmp tmp*.; + tmp; fprintf('at %.8f ', ) fprintf('f() f('f( %.e; f() %.e \n', f(),f()); ) f( ))
a +b+ c براي اجتناب از خطا نكاتي -b ± b - ac c ; a -b b -ac -b+ b -ac if b < a c if b -b b -ac > تفريق نامناسب هنگامي كه دو مقدار نزديك به هم هستند. اجتناب از نمونه : معادله درجه دو ريشه دارد: -b b -ac if b > a c if b -b+ b -ac < راه حل: 9 مناسب بر عبارت شكل ( )( ) + + sin sin sin cos + e e sinh cosh براي اجتناب از خطا نكاتي مواقع مناسب. تفريق نامناسب در استفاده از بسط تيلور براي اجتناب از e f() @ " ' g() g() g() g () e g( ) + g ( )+ + +!!! + ++ + +!!! e f() + + + f()!!! %Chap_: reduce the round off error using Talor series f inline('(ep() )/',''); f inline('((/+)*/) ((/+) /) + /+''');, ; tmp ; for k : tmp tmp*.; + tmp; fprintf('at %.f, f ', ) fprintf('f() %8.e; f() %8.e \n', f(),f());
براي اجتناب از خطا نكاتي تفريق نامناسب در محاسبه واريانس. مثال: راه حلي براي اجتناب از { i } داده ها : مجموعه اي از N مقدار مشاهده (Observations) : N i N i Mean/Average طبق تعريف: Variance N i σ ( ) ()? راه حل N i جهت اجتناب از خطاي محاسباتي تفريق نامناسب مي توان عبارت واريانس را بصورت زير بازنويسي كرد: σ N N ( ) N i i N i N i خطا انتشار 7 e d محاسبه رل انتگرال داده شده هدف : n I n e d n n n n n I n.6.679 I e.6 d e..7.7 5.8 6. I : 7 6. 7.6 حل: انتگرال را بصورت عمومي مرتب نموده و رابطه بازگشتي را بدست مي آوريم: وريم n I n.6.679.6.7 5.7 6.79 7. I e d e n e d ni I ni I I n 6 ( ) n n n n I 7. n از طرفي: با استفاده از رابطه بازگشتي مقدار درست : راه حل : مرتب كردن بازگشتي بصورت: رابطه
يك برنامه خوب ويژگيهاي مقاوم بودن برنامه (در برابر تغييرات مقادير اوليه). راهنماي ي كاربر با اراي ه هشدارها جهت جلوگيري از خطاهاي اجرا errors) (Runtime. Nested programming p() a + a + a + a+ a 5 ((( ) ) ) p () a+ a + a + a + a n 5 K λ k λ S(K) e λ, K 55 k! k بودن برنامه. User fril فشردگي و آراستگي. از نظر محاسبات عددي: دقت پاسخ. سرعت اجرأ. حجم حافظه مصرفي.. % Chap_5: nested structure % not nested structure lam ; K 55; lam ; K 55; p ep( lam); S ; S ; for k :K for k :K p p*lam/k; S S + p; S p lam^k/factorial(k); S S + p; S*ep( lam) يك برنامه خوب ويژگيهاي ترجيح در محاسبات برداري در برابر محاسبات تكراري حلقه. %Chap_6: nested multiplication vs. plain multiple multiplication N + ; a [:N]; ; tic % initialize the timer p sum(a.*.^[n : :]); %plain multiplication li p, toc % measure the time passed from the time of eecuting tic tic, pn a(); for i :N %nested multiplication pn pn* + a(i); pn, toc tic, polval(a,), toc
5 N تبديل فوريهگ تگسسته: يك برنامه خوب ويژگيهاي j Ω n ( Ω ) [ ] Ω [ ] X ne, : π n % Chap_7: loop structure N ; rand(,n); % a random sequence [n] for n :N W [ :]*pi/; % frequenc range tic for k :length(w) X(k) ; %for loop for n :N, X(k) X(k) + (n)*ep( j*w(k)*(n )); toc tic X ; for n :N %for vector loop X X +(n)*ep( j*w*(n )); toc discrepanc norm(x X) %transpose for dimension compatibilit يك برنامه خوب ويژگيهاي >> fctrl( ) ans???... Which is not true. محاسبات تكراري در مقايسه با محاسبات تودرتو.(nested) جلوگيري از خطاي اجرأ. با اصلاح تابع با اعمال كنترل ورودي خطا. function m fctrl(n) if n < error('the factorial of negative number??'); m ; for k :n m m*k; k! k(k ) function Chap_8 %Chap _ 8: Iterative versus Nested routine n ; tic k fctrl(n); toc tic k fctrl(n); toc function m fctrl(n) m ; for k :n, m m*k; 6 function m fctrl(n) if n <, m ; else m n*fctrl(n );
تمرين برنامه Matlab براي محاسبه عبارت زير بصورت برداري و بصورت حلقه تكرار نوشته و نتايج CPU time را مقايسه نماي يد. ( n + ) n + 8 π, n,, براي محاسبه عبارتهاي زير در نقاط داده شده نوشته و نتايج را مقايسه نماي يد. Matlab برنامه + + + + + 9 7 7 9,,,,,, 7 Matlab با آشناي ي 8